Home

Operator Usage

Name

compile

Description

compile input-seq
unpack the input-seq and compile the result
the first superposition is the operator name
the rest are parameters to be fed to that operator
NB: the parameters are only superpositions, not sequences
If you require sequence parameters, then you need to do it indirectly using a wrapper function


Examples

-- define a function, then compile it:
fn (*,*,*) #=> 2|__self0> . 3|__self1> . 5|__self2> . 7|__self3>
compile (|op: fn> . |input> . |a> . |b> . |c>)
    2|input> . 3|a> . 5|b> . 7|c>

-- Now, if you require sequence parameters, you need a wrapper function:
wrapper-fn (*,*,*) #=> fn(seq |__self1>, seq |__self2>, seq |__self3>) seq |__self0>

-- Then we define our sequence parameters
-- They can be anything:
seq |input> => |input seq>
seq |a> => |seq 1>
seq |b> => |seq 2>
seq |c> => |seq 3>

-- Now, compile it:
compile (|op: wrapper-fn> . |input> . |a> . |b> . |c>)
    2|input seq> . 3|seq 1> . 5|seq 2> . 7|seq 3>


-- use the compile operator to define the expand-srange operator:
-- NB: we can use other operators in place of srange() too
-- For foo() simply replace |op: srange> with |op: foo>
-- And you will probably want to change ssplit[" .. "] to something else too
expand-srange |*> #=>
    unlearn[the] |result>
    the |result> => compile (|op: srange> . |> . ssplit[" .. "] |__self>)
    value-if( do-you-know the |result>, the |result>, |__self>)

-- now apply it:
expand-srange |3 .. 8>
    |3> . |4> . |5> . |6> . |7> . |8>

-- an example with categories:
expand-srange |number: 8 .. number: 11>
    |number: 8> . |number: 9> . |number: 10> . |number: 11>

-- an example with a specified step:
expand-srange |3 .. 9 .. 2>
    |3> . |5> . |7> . |9>

-- if applied to a non-range, then return it unchanged:
expand-srange |alpha>
    |alpha>

-- if applied to a badly defined range, then return it unchanged:
expand-srange |5 .. gamma>
    |5..gamma>


See also

Operator type

sequence context